// Control Spy Statements from Microsoft Systems Journal (MSJ) article.
// Run appropriate Control Spy application then cut and paste an
// individual statement and press "Send".

// ********** ComboBoxEx **********

// Insert an item
MSG ( CBEM_INSERTITEM,
	0,
	COMBOBOXEXITEM(
		CBEIF_IMAGE|CBEIF_SELECTEDIMAGE|CBEIF_INDENT|CBEIF_TEXT,				
		-1,
		"My ComboBoxEx Item",
		0,
		2,
		2,
		0,
		8,
		0))

// Set item attributes
MSG ( CBEM_SETITEM,
	0,
	COMBOBOXEXITEM(
		CBEIF_IMAGE|CBEIF_SELECTEDIMAGE|CBEIF_TEXT,
		9,
		LPSTR_TEXTCALLBACK,
		0,
		I_IMAGECALLBACK,
		I_IMAGECALLBACK,
		0,
		0,
		0))

// ********* Date and Time Picker **********

// Set date range
MSG ( DTM_SETRANGE,
	GDTR_MIN|GDTR_MAX,
	systimearr(
		SYSTEMTIME(1998,1,0,1,0,0,0,0),
		SYSTEMTIME(2000,1,0,1,0,0,0,0)))

// Set date format
MSG ( DTM_SETFORMAT,
	0,
	"MMM' 'M' ,'yy' 'ddd' 'h':'mm' 'tt")

// ********** Flat Scroll Bar **********

// Dynamically turn off flat scroll bars
API: UnitializeFlatSB(window)

// Set horizontal scroll position
API: FlatSB_SetScrollPos(window,SB_HORZ,0,TRUE)

// Turn on flat scroll bars
API: InitializeFlatSB(window)

// Change background color
API: FlatSB_SetScrollProp(window,WSB_PROP_HBKGCOLOR,RGB(0,0,128),TRUE)

// Change style
API: FlatSB_SetScrollProp(window,WSB_PROP_HSTYLE,FSB_ENCARTA_MODE,TRUE)

// ********** IP Address **********

// Set address
MSG ( IPM_SETADDRESS,
	0,
	MAKEIPADDRESS(198,105,232,37))

// Get address
MSG ( IPM_GETADDRESS,
	0,
	ipbuffer)

// Set range for field
MSG ( IPM_SETRANGE,
	1,
	MAKEIPRANGE(100,150))

// ********** Month Calendar **********

// Set date range
MSG ( MCM_SETRANGE,
	GDTR_MIN|GDTR_MAX,
	systimearr(
		SYSTEMTIME(1972,7,0,1,0,0,0,0),
		SYSTEMTIME(1976,3,0,10,0,0,0,0)))

// Set "today" date
MSG ( MCM_SETTODAY,
	0,
	SYSTEMTIME(2000,1,0,1,0,0,0,0))

// Set bold day states
MSG ( MCM_SETDAYSTATE,
	3,
	mdsarr(
		BOLDDAY(31),
		BOLDDAY(15)|BOLDDAY(16),
		BOLDDAY(1)))

// Get display area
MSG ( MCM_GETMINREQRECT,
	0,
	RECT)

// Do hit test
MSG ( MCM_HITTEST,
	0,
	MCHITTESTINFO(
		mchtisize,
		POINT(45,50)))

// ********** Pager **********

// Get state of button
MSG ( PGM_GETBUTTONSTATE,
	0,
	PGB_BOTTOMORRIGHT)

// Set button size
MSG ( PGM_SETBUTTONSIZE,
	0,
	30)

// Set button backgound color
MSG ( PGM_SETBKCOLOR,
0,
RGB(0,255,0))

// ********** Rebar **********

// Insert band
MSG ( RB_INSERTBAND,
	-1,
	REBARBANDINFO(
		rbbisize,
		RBBIM_COLORS|RBBIM_STYLE|RBBIM_TEXT,
		RBBS_GRIPPERALWAYS,
		RGB(255,255,0),
		RGB(0,0,128),
		"My Band",
		0,0,0,0,0,
		50,
		0,0,0,0,0,0,0,0))

// Set band properties
MSG ( RB_SETBANDINFO,
	0,
	REBARBANDINFO(
		rbbisize,
		RBBIM_TEXT|RBBIM_BACKGROUND,
		0,
		RGB(0,0,0),
		RGB(0,0,0),
		"New Label",
		0,0,0,0,0,0,
		bitmap,
		0,0,0,0,0,0,0))

// ********** Animation **********

// No statements

// ********** Header **********

// Set item properties
MSG ( HDM_SETITEM,
	0,
	HDITEM(
		HDI_FORMAT,
		0,
		"",
		0,
		0,
		HDF_RIGHT|HDF_BITMAP_ON_RIGHT|HDF_STRING|HDF_IMAGE,
		0,
		0,
		0))

// Do hit test
MSG ( HDM_HITTEST,
	0,
	HDHITTESTINFO(
		POINT(10,15)))

// ********** Image List **********

// Set overlay image
API: ImageList_SetOverlayImage(
	imagelist0,
	8,
	1)

// Draw image with overlay
API: ImageList_Draw(
	imagelist0,
	4,
	dc,
	0,
	0,
	ILD_TRANSPARENT|INDEXTOOVERLAYMASK(1))

// Start drag operation
API: ImageList_BeginDrag(
	imagelist0,
	4,
	16,
	16)

// Set initial image position, lock window updates
API: ImageList_DragEnter(
	NULL,
	100,
	100)

// Move drag image
API: ImageList_DragMove(150,200)

// Unlock window updates
API: ImageList_DragLeave(NULL)

// End drag operation
API: ImageList_EndDrag()

// ********** List View **********

// Set item properties, use callbacks
MSG ( LVM_SETITEM,
	0,
	LVITEM(
		LVIF_TEXT|LVIF_STATE|LVIF_IMAGE,
		1,
		0,
		LVIS_SELECTED/0/0,
		LVIS_SELECTED,
		LPSTR_TEXTCALLBACK,
		0,
		I_IMAGECALLBACK,
		0,0))

// Set working areas
MSG ( LVM_SETWORKAREAS,
	1,
	rectarr(
		RECT(40,40,500,500),
		RECT(0,0,0,0)))

// ********** Property Sheet **********

// Change button text
MSG (PSM_CANCELTOCLOSE, 0, 0)

// Set title
MSG (PSM_SETTITLE, 0, "My Property Sheet")

// ********** Progress Bar **********

// Set range
MSG (PBM_SETRANGE32, -125, 125)

// Set position
MSG (PBM_SETPOS, 0, 0)

// ********** Status Bar **********

// Set bar divisions
MSG ( SB_SETPARTS,
	2,
	INTARR { 100,185,0,0,0,0,0,0 })

// Set part text
MSG (SB_SETTEXT, 1, "My Text!")

// Set part icon
MSG (SB_SETICON, 1, Icon0)

// ********** Tab **********

// Insert a tab
MSG ( TCM_INSERTITEM,
	6,
	TCITEM(
		TCIF_IMAGE|TCIF_TEXT,
		0,0,
		"My Tab",
		0,
		-1,
		0))

// Do hit text
MSG ( TCM_HITTEST,
	0,
	TCHITTESTINFO(
		POINT(10,15),
		0))

// ********** Toolbar **********

// Insert button and set state
MSG ( TB_INSERTBUTTON,
	2,
	TBBUTTON(
		5,
		999,
		TBSTATE_CHECKED|TBSTATE_ENABLED,
		TBSTYLE_CHECK,
		0,
		0))

// Set hot image list
MSG (TB_SETHOTIMAGELIST, 0, HotIL)

// ********** Tooltip **********

// Set tooltip tool to tracking
MSG ( TTM_SETTOOLINFO,
	0,
	TOOLINFO(
		tisize,
		TTF_IDISHWND|TTF_TRACK|TTF_ABSOLUTE,
		parent,
		tool0,
		RECT(0,0,0,0),
		0,
		"Tracking tool!",
		0))

// Activate tracking
MSG ( TTM_TRACKACTIVATE,
	TRUE,
	TOOLINFO(
		tisize,
		0,
		parent,
		tool0,
		RECT(0,0,0,0),
		0,
		"string",
		0))

// Move tip window
MSG ( TTM_TRACKPOSITION,
	0,
	MAKELONG(150,300))

// Turn off tracking
MSG ( TTM_TRACKACTIVATE,
	FALSE,
	TOOLINFO(tisize,0,0,0,RECT(0,0,0,0),0,"string",0))

// Set tip window background color
MSG ( TTM_SETTIPBKCOLOR,
	RGB(255,0,255),
	0)

// ********** Trackbar **********

// Set range
MSG ( TBM_SETRANGE,
	TRUE,
	MAKELONG(-50,50))

// Set frequency of tick marks
MSG ( TBM_SETTICFREQ,
	10,
	0)

// Set selection range
MSG ( TBM_SETSEL,
	TRUE,
	MAKELONG(-13,24))

// ********** Tree View **********

// Insert an item, use callbacks
MSG ( TVM_INSERTITEM,
	0,
	TVINSERTSTRUCT(
		root,
		node2,
		TVITEMEX(
			TVIF_IMAGE|TVIF_SELECTEDIMAGE|TVIF_STATE|TVIF_TEXT,
			0,
			TVIS_BOLD/0/0,
			TVIS_BOLD,
			"My Tree View Item",
			0,
			I_IMAGECALLBACK,
			I_IMAGECALLBACK,
			0,0,0)))

// Set item text color
MSG ( TVM_SETTEXTCOLOR,
	0,
	RGB(0,0,255))

// Activate insertion mark
MSG ( TVM_SETINSERTMARK,
	TRUE,
	node2)

// Turn on in-place label edit
MSG ( TVM_EDITLABEL,
	0,
	root)

// ********** Up-Down **********

// Set increment acceleration
MSG ( UDM_SETACCEL,
	3,
	udaarr(
		UDACCEL(0,1),
		UDACCEL(4,15),
		UDACCEL(10,50)))

// ********** Drag List Box **********

// No statements

// ********** Hot Key **********

// Set invalid combinations
MSG ( HKM_SETRULES,
	HKCOMB_C,
	MAKELPARAM(HOTKEYF_ALT,0))

// Set display
MSG ( HKM_SETHOTKEY,
	MAKEWORD(
		'X',
		HOTKEYF_CONTROL),
	0)
